#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#include "envdata.h"
#include "squeue.h"

extern int semid;
extern squeue *sq;
extern int haveData;
extern struct sembuf P,V;

/**
 *@breif:接收线程
 *@param:arg:clientfd
 *@return void *
 *@author:马德顺
 */
void *handler_recv(void * arg)
{
	ssize_t bytes;
	struct sendEnv myData;

	while(1)
	{
		bytes=recv(*(int *)arg,&myData,sizeof(myData),0);//接收通过client发来的串口信息
		if(bytes<0)
		{
			puts("recv error!");
			break;
		}
		if(bytes==0)
		{
			puts("peer exit!");
			return ;
		}

		semop(semid,&P,1);
		enqueue(sq,&myData);//放入消息队列
		semop(semid,&V,1);
		haveData = 1;//havaData标志置为1代表处理线程可以工作了
	}

	pthread_exit("tid exit");
}
